/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.come.manager;

import com.brain.come.dto.SolicitudVentaDetaDto;
import com.brain.come.dto.SolicitudVentaDto;
import com.brain.come.view.util.ConstantesCome;
import com.brain.conf.dto.TarifaProductoDto;
import com.brain.conf.manager.TarifaProductoManager;
import com.brain.core.common.ExportarExcelVentas;
import com.brain.core.manager.*;
import com.brain.core.common.UtilCore;
import com.brain.core.configuracion.WebServletContextListener;
import com.brain.core.dto.CorreoDto;
import com.brain.core.exception.DAOException;
import com.brain.core.hibernate.dao.DAOGenerico;
import com.brain.core.view.mbean.ApplicationMBean;
import com.brain.core.view.mbean.SessionMBean;
import com.brain.core.view.util.ConstantesCore;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
import javax.annotation.Resource;
import javax.faces.model.SelectItem;
import javax.mail.MessagingException;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;

/**
 *
 * @author Indra
 */
@Service
public class SolicitudVentaManager extends ComunManager<SolicitudVentaDto> implements Serializable {

    private static Logger logger = Logger.getLogger(SolicitudVentaManager.class);
    private Long idEntidad = 177L;
    @Resource
    private DAOGenerico<SolicitudVentaDto> springHibernateDao;
    @Resource
    private RecursosManager recursosManager;
    @Resource
    private ParametroManager parametroManager;
    private final String url = "/pages/come/solicitudVenta/solicitudVenta.xhtml";
    private final String urlLista = "/pages/come/solicitudVenta/listaSolicitudesVenta.xhtml";

    /**
     * obtener Solicitud Venta por ID
     *
     * @param id
     * @return Solicitud Venta
     * @throws DAOException
     */
    public SolicitudVentaDto obtenerPorId(Long id) throws DAOException {
        SessionMBean sessionMBean = (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");
        String hqsql = "select e from SolicitudVentaDto as e where e.id=e.id and e.id = ?";
        List<Object> listaParametros = new ArrayList<Object>();
        listaParametros.add(id);
        return (SolicitudVentaDto) springHibernateDao.ejecutarQuery(hqsql, listaParametros).get(0);
    }

    /**
     * Metodo para inicializar nueva Solicitud Venta
     *
     * @return Solicitud Venta
     */
    public SolicitudVentaDto inicializar() {
        SessionMBean sessionMBean = (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");
        SolicitudVentaDto dto = new SolicitudVentaDto();
        dto.setEmpresaDto(sessionMBean.getEmpresaDto());
        if (sessionMBean.getOrganizacionDto() != null) {
            if (sessionMBean.getOrganizacionDto().getId() != null) {
                dto.setOrganizacionDto(sessionMBean.getOrganizacionDto());
            }
        }
        dto.setSolicitanteDto(sessionMBean.getSessionUsuarioDto());
        dto.setEstado(ConstantesCome.ValoresConstantes.SOL_VENTA_COD_ESTADO_ELABORACION);

        return dto;
    }

    /**
     * Metodo para obtener Solicitudes de Venta
     *
     * @param dtoFiltro Solicitud Venta
     * @return
     * @throws DAOException
     */
    public List<SolicitudVentaDto> obtener(SolicitudVentaDto dtoFiltro) throws DAOException {
        SessionMBean sessionMBean = (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");
        String hqsql = "select e from SolicitudVentaDto as e where e.id=e.id ";
        List<Object> listaParametros = new ArrayList<Object>();

        if (dtoFiltro.getId() != null && !dtoFiltro.getId().equals(0L)) {
            hqsql += " and e.id = ?";
            listaParametros.add(dtoFiltro.getId());
        }
        if (dtoFiltro.getDescripcion() != null && dtoFiltro.getDescripcion().length() != 0) {
            hqsql += " and upper(e.descripcion) like '%" + dtoFiltro.getDescripcion().toUpperCase() + "%'";
        }

        if (dtoFiltro.getNombreSolicitante() != null && dtoFiltro.getNombreSolicitante().length() != 0) {
            hqsql += " and upper(e.solicitanteDto.descripcion) like '%" + dtoFiltro.getNombreSolicitante().toUpperCase() + "%'";
        }

        if (dtoFiltro.getEstado() != null && dtoFiltro.getEstado().length() != 0 && !dtoFiltro.getEstado().equals(ConstantesCome.ValoresConstantes.SOL_VENTA_COD_ESTADO_TODOS)) {
            hqsql += " and upper(e.estado) = '" + dtoFiltro.getEstado() + "'";
        }

        hqsql += " and e.empresaDto.id = ?";
        listaParametros.add(sessionMBean.getEmpresaDto().getId());
        if (sessionMBean.getOrganizacionDto() != null && sessionMBean.getOrganizacionDto().getId() != null) {
            hqsql += " and e.organizacionDto.id = ?";
            listaParametros.add(sessionMBean.getOrganizacionDto().getId());
        }

        hqsql += " order by e.descripcion,e.fechaCreacion asc";
        return springHibernateDao.ejecutarQuery(hqsql, listaParametros);
    }

    public List<SolicitudVentaDto> obtenerConfirmadas(SolicitudVentaDto dtoFiltro) throws DAOException {
        SessionMBean sessionMBean = (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");
        String hqsql = "select e from SolicitudVentaDto as e where e.id=e.id ";
        List<Object> listaParametros = new ArrayList<Object>();

        if (dtoFiltro.getId() != null && !dtoFiltro.getId().equals(0L)) {
            hqsql += " and e.id = ?";
            listaParametros.add(dtoFiltro.getId());
        }
        if (dtoFiltro.getDescripcion() != null && dtoFiltro.getDescripcion().length() != 0) {
            hqsql += " and upper(e.descripcion) like '%" + dtoFiltro.getDescripcion().toUpperCase() + "%'";
        }

        if (dtoFiltro.getNombreSolicitante() != null && dtoFiltro.getNombreSolicitante().length() != 0) {
            hqsql += " and upper(e.solicitanteDto.descripcion) like '%" + dtoFiltro.getNombreSolicitante().toUpperCase() + "%'";
        }

        hqsql += " and upper(e.estado) = ?";
        listaParametros.add(ConstantesCome.ValoresConstantes.PEDIDO_VENTA_COD_ESTADO_CONFIRMADO);
        hqsql += " and not exists (select 'X' from PedidoVentaDto as p where p.solicitudVentaDto.id = e.id)";
        hqsql += " and not exists (select 'X' from SolicitudVentaDetaDto as s where s.solicitudVentaDto.id = e.id and s.pedidoVentaDetaDto.id is not null)";
        hqsql += " and e.empresaDto.id = ?";
        listaParametros.add(sessionMBean.getEmpresaDto().getId());
        if (sessionMBean.getOrganizacionDto() != null && sessionMBean.getOrganizacionDto().getId() != null) {
            hqsql += " and e.organizacionDto.id = ?";
            listaParametros.add(sessionMBean.getOrganizacionDto().getId());
        }

        hqsql += " order by e.fechaConfirmacion asc";
        return springHibernateDao.ejecutarQuery(hqsql, listaParametros);
    }

    /**
     * Metodo para guardar, editar Solicitudes de Venta
     *
     * @param dto Solicitud Venta
     * @return cadena de satisfaccion
     */
    public String guardar(SolicitudVentaDto dto) {

        String to = null;
        String mensajeTrx = "";
        SessionMBean sessionMBean = (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");
        ApplicationMBean applicationMBean = (ApplicationMBean) WebServletContextListener.getApplicationContext().getBean("applicationMBean");
        try {
            if (dto.getOrganizacionDto() != null) {
                {
                    dto.setUsuarioDto(sessionMBean.getSessionUsuarioDto());
                    dto.setFecha(UtilCore.Fecha.obtenerFechaActualDate());
                    dto.setTerminal(sessionMBean.getSessionTerminal());
                }
                //Definimos el color de la fila segun el estado
                definirCssPorEstado(dto);
                if (sessionMBean.getAccion() == applicationMBean.getNuevo()) {

                    dto.setUsuarioCreacionDto(sessionMBean.getSessionUsuarioDto());
                    dto.setFechaCreacion(UtilCore.Fecha.obtenerFechaActualDate());
                    dto.setTerminalCreacion(sessionMBean.getSessionTerminal());
                    UtilCore.General.toUpperCaseDto(dto);
                    nuevo(dto);
                    mensajeTrx = UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok");
                    recursosManager.showMessage(mensajeTrx);

                    to = "";//retroceder();

                } else if (sessionMBean.getAccion() == applicationMBean.getEditar()) {
                    UtilCore.General.toUpperCaseDto(dto);
                    if (dto.getEstado().equals(ConstantesCome.ValoresConstantes.SOL_VENTA_COD_ESTADO_CONFIRMADA)
                            || dto.getEstado().equals(ConstantesCome.ValoresConstantes.SOL_VENTA_COD_ESTADO_RECHAZADA)) {
                        //this.enviarEmail(dto);
                    }
                    editar(dto);
                    mensajeTrx = UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok");
                    recursosManager.showMessage(mensajeTrx);
                    to = "";//retroceder();

                }

            } else {
                mensajeTrx = UtilCore.Internacionalizacion.getMensajeInternacional("general.mensaje.no.organizacion");
                recursosManager.showError(mensajeTrx);
                to = null;
            }
        } catch (Exception ex) {
            mensajeTrx = ex.getMessage();
            recursosManager.showError(ex.getMessage());
            logger.error(mensajeTrx);

            to = null;
        }
        return to;
    }
    
    public String obtenerCadenaUltimaModificacionLista(SolicitudVentaDto dto) {
        String cad = "";
        int diasDif = UtilCore.Fecha.diferenciaDiasFechas(dto.getFecha(), UtilCore.Fecha.obtenerFechaActualDate());
        if (diasDif == 0) {
            SimpleDateFormat sdf = new SimpleDateFormat(com.brain.core.common.ConstantesCore.formatoHora);
            cad = obtenerEstadoCadena(dto) + " " + UtilCore.Internacionalizacion.getMensajeInternacional("general.label.hoy.a.las") + " " + sdf.format(dto.getFecha());            
        }
        else if (diasDif == 1) {
            SimpleDateFormat sdf = new SimpleDateFormat(com.brain.core.common.ConstantesCore.formatoHora);
            cad = obtenerEstadoCadena(dto) + " " + UtilCore.Internacionalizacion.getMensajeInternacional("general.label.ayer.a.las") + " " + sdf.format(dto.getFecha());
        }
        else if (diasDif >1 && diasDif < 7) {
            int diaSemana = 0;
            String diaTexto = "";
            Calendar calendario = Calendar.getInstance();
            calendario.setTime(UtilCore.Fecha.obtenerFechaActualDate());;
            SimpleDateFormat sdf = new SimpleDateFormat(com.brain.core.common.ConstantesCore.formatoHora);
            if (calendario.get(Calendar.DAY_OF_WEEK) > diasDif) {
                diaSemana = calendario.get(Calendar.DAY_OF_WEEK) - diasDif;
            }
            else {
                diaSemana = 7 - Math.abs(calendario.get(Calendar.DAY_OF_WEEK) - diasDif);                
            }
            diaTexto = obtenerDiaSemanaTexto(diaSemana);
            cad = obtenerEstadoCadena(dto) + " " + UtilCore.Internacionalizacion.getMensajeInternacional("general.label.el") + " " + diaTexto + " " + sdf.format(dto.getFecha());
        }
        else {
            Calendar calendario = Calendar.getInstance();
            calendario.setTime(dto.getFecha());
            cad = obtenerEstadoCadena(dto) + " " + UtilCore.Internacionalizacion.getMensajeInternacional("general.label.hace") + " " + UtilCore.Fecha.diferenciaDiasFechas(dto.getFecha(), UtilCore.Fecha.obtenerFechaActualDate()) + " " + UtilCore.Internacionalizacion.getMensajeInternacional("general.label.dias");
        }
        return cad;
    }
    
    public String obtenerEstadoCadena(SolicitudVentaDto dto) {
        String cad = "";
        if (dto.getFecha().after(dto.getFechaCreacion())) {
            if (dto.getEstado().equals(ConstantesCome.ValoresConstantes.SOL_VENTA_COD_ESTADO_ELABORACION)) {
                cad = UtilCore.Internacionalizacion.getMensajeInternacional("general.label.modificado");
            }
            else if (dto.getEstado().equals(ConstantesCome.ValoresConstantes.SOL_VENTA_COD_ESTADO_ANULADA)) {
                cad = UtilCore.Internacionalizacion.getMensajeInternacional("general.label.anulado");
            }
            else if (dto.getEstado().equals(ConstantesCome.ValoresConstantes.SOL_VENTA_COD_ESTADO_RECHAZADA)) {
                cad = UtilCore.Internacionalizacion.getMensajeInternacional("general.label.rechazado");
            }
            else if (dto.getEstado().equals(ConstantesCome.ValoresConstantes.SOL_VENTA_COD_ESTADO_CONFIRMADA)) {
                cad = UtilCore.Internacionalizacion.getMensajeInternacional("general.label.confirmado");
            }
        }
        else {
            cad = UtilCore.Internacionalizacion.getMensajeInternacional("general.label.creado");
        }
        return cad;
    }
    
    public String obtenerDiaSemanaTexto(int dia) {
        String[] diasSemana = {
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.domingo.a.las"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.lunes.a.las"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.martes.a.las"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.miercoles.a.las"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.jueves.a.las"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.viernes.a.las"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.sabado.a.las")
        };
        return diasSemana[dia-1];
    }
    
    public String obtenerMesTexto(int mes) {
        String[] meses = {
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.enero"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.febrero"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.marzo"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.abril"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.mayo"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.junio"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.julio"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.agosto"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.setiembre"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.octubre"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.noviembre"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.diciembre")            
        };
        return meses[mes];
    }

    public void enviarEmail(SolicitudVentaDto dtoSol) {
        CorreoElectronicoManager managerEmail = (CorreoElectronicoManager) WebServletContextListener.getApplicationContext().getBean("correoElectronicoManager");
        ApplicationMBean applicationMBean = (ApplicationMBean) WebServletContextListener.getApplicationContext().getBean("applicationMBean");
        CorreoDto dto = new CorreoDto();
        dto.setAsunto(applicationMBean.getNombreSistema());
        dto.setCuerpo(managerEmail.formatoSolicitudVenta(dtoSol));
        String[] to = new String[1];
        if (dtoSol.getSolicitanteDto().getEmailLaboral() != null || dtoSol.getSolicitanteDto().getEmailPersonal() != null) {
            if (dtoSol.getSolicitanteDto().getEmailLaboral() != null) {
                to[0] = dtoSol.getSolicitanteDto().getEmailLaboral();
            } else {
                to[0] = dtoSol.getSolicitanteDto().getEmailPersonal();
            }
            dto.setTo(to);
            try {
                managerEmail.enviar(dto);
            } catch (UnsupportedEncodingException ex) {
                recursosManager.showError(ex.getMessage());

            } catch (MessagingException ex) {
                recursosManager.showError(ex.getMessage());                
            } catch(Exception ex){
                recursosManager.showError(ex.getMessage());
            }
        } else {
            recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("general.mensaje.no.organizacion"));
        }
    }

    
    public void definirCssPorEstado(SolicitudVentaDto dto) {
        if (dto.getEstado().equals(ConstantesCome.ValoresConstantes.SOL_VENTA_COD_ESTADO_ELABORACION)) {
            dto.setInlinestyle(ConstantesCore.cssEstados.cssElaboracion);
        } else if (dto.getEstado().equals(ConstantesCome.ValoresConstantes.SOL_VENTA_COD_ESTADO_RECHAZADA)) {
            dto.setInlinestyle(ConstantesCore.cssEstados.cssRechazado);
        } else if (dto.getEstado().equals(ConstantesCome.ValoresConstantes.SOL_VENTA_COD_ESTADO_ANULADA)) {
            dto.setInlinestyle(ConstantesCore.cssEstados.cssAnulado);
        } else if (dto.getEstado().equals(ConstantesCome.ValoresConstantes.SOL_VENTA_COD_ESTADO_CONFIRMADA)) {
            dto.setInlinestyle(ConstantesCore.cssEstados.cssConfirmado);
        }
    }

    public SolicitudVentaDetaDto unificarDatosSolicitudVentaDetalle(SolicitudVentaDetaDto scdDto) {
        TarifaProductoManager tarifaProductoManager = (TarifaProductoManager) WebServletContextListener.getApplicationContext().getBean("tarifaProductoManager");
        try {
            TarifaProductoDto tpDto = tarifaProductoManager.obtenerTarifaProductoVigenteAuxiliar(scdDto.getProductoDetaDto());
            if (tpDto != null) {
                scdDto.setTarifaDto(tpDto.getTarifaDto());
                scdDto.setMonedaDto(tpDto.getMonedaVentaDto());
                scdDto.setPrecioTarifa(tpDto.getMontoVenta());
            } else {
                scdDto.setMonedaDto(scdDto.getProductoDetaDto().getMonedaVentaDto());
                scdDto.setTarifaDto(null);
                scdDto.setPrecioTarifa(scdDto.getProductoDetaDto().getPrecioVenta());
                recursosManager.showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("sol.venta.deta.mensaje.no.tarifa.prod"));
            }
            scdDto.setUnidadMedidaDto(scdDto.getProductoDetaDto().getUnidadMedidaDto());
            scdDto.setDescuento(scdDto.getProductoDetaDto().getDescuentoVenta());
            BigDecimal precioUnit = scdDto.getPrecioTarifa().subtract(UtilCore.Numero.dividir(scdDto.getPrecioTarifa().multiply(scdDto.getDescuento()), BigDecimal.valueOf(Long.valueOf("100")), 2));
            scdDto.setPrecioUnitario(precioUnit);
        } catch (Exception ex) {
            recursosManager.showError(ex.getMessage());
            logger.error(ex.getMessage());
        }
        return scdDto;
    }

    public Boolean verificarDetalles(SolicitudVentaDto dto) {
        if (dto.getListaDetalles() != null) {
            if (!dto.getListaDetalles().isEmpty() && dto.getListaDetalles().size() > 0) {
                return true;
            } else {
                recursosManager.showWarning(UtilCore.Internacionalizacion.getMensajeInternacional("sol.venta.mensaje.no.detalles"));
            }
        } else {
            recursosManager.showWarning(UtilCore.Internacionalizacion.getMensajeInternacional("sol.venta.mensaje.no.detalles"));
        }
        return false;
    }

    public SelectItem[] siTiposSolVentaTodos() {
        SelectItem[] si = new SelectItem[5];
        si[0] = new SelectItem(ConstantesCome.ValoresConstantes.SOL_VENTA_COD_ESTADO_ELABORACION, ConstantesCome.ValoresConstantes.SOL_VENTA_DESC_ESTADO_ELABORACION);
        si[1] = new SelectItem(ConstantesCome.ValoresConstantes.SOL_VENTA_COD_ESTADO_ANULADA, ConstantesCome.ValoresConstantes.SOL_VENTA_DESC_ESTADO_ANULADA);
        si[2] = new SelectItem(ConstantesCome.ValoresConstantes.SOL_VENTA_COD_ESTADO_CONFIRMADA, ConstantesCome.ValoresConstantes.SOL_VENTA_DESC_ESTADO_CONFIRMADA);
        si[3] = new SelectItem(ConstantesCome.ValoresConstantes.SOL_VENTA_COD_ESTADO_RECHAZADA, ConstantesCome.ValoresConstantes.SOL_VENTA_DESC_ESTADO_RECHAZADA);
        si[4] = new SelectItem(ConstantesCome.ValoresConstantes.SOL_VENTA_COD_ESTADO_TODOS, ConstantesCome.ValoresConstantes.SOL_VENTA_DESC_ESTADO_TODOS);
        return si;
    }

    public void reordenarDetalles(SolicitudVentaDto dto) {
        List<SolicitudVentaDetaDto> lstDetalles = dto.getListaDetalles();
        SolicitudVentaDetaManager solicitudVentaDetaManager = (SolicitudVentaDetaManager) WebServletContextListener.getApplicationContext().getBean("solicitudVentaDetaManager");
        try {
            UtilCore.General.ordena(lstDetalles, "item");
            int count = 0;
            for (SolicitudVentaDetaDto d : lstDetalles) {
                count++;
                d.setItem(count);
            }
            if (dto.getId() != null) {
                solicitudVentaDetaManager.nuevoMuchos(lstDetalles);
            }
        } catch (Exception ex) {
            recursosManager.showError(ex.getMessage());
            logger.error(ex.getMessage());
        }
    }

    public void generarExcelSeleccionados(ExportarExcelVentas.SolicitudVenta exp, SolicitudVentaDto[] selectedSVs) {
        StringBuilder strCabecera = this.obtenerCabeceraExcel(exp);
        List<SolicitudVentaDto> lst = Arrays.asList(selectedSVs);
        List lstCuerpo = this.obtenerCuerpoExcel(exp, lst);
        String nombreArchivo = "SOLICITUD_VENTA_" + UtilCore.Fecha.obtenerFechaActual().replace(":", "_") + ".xls";
        this.recursosManager.generarExcel(strCabecera.toString(), lstCuerpo, nombreArchivo);
        this.recursosManager.viewArchivo(nombreArchivo);
    }

    public void generarExcelPorTabla(ExportarExcelVentas.SolicitudVenta exp, List<SolicitudVentaDto> lstSV) {
        StringBuilder strCabecera = this.obtenerCabeceraExcel(exp);
        List lstCuerpo = this.obtenerCuerpoExcel(exp, lstSV);
        String nombreArchivo = "SOLICITUD_VENTA_" + UtilCore.Fecha.obtenerFechaActual().replace(":", "_") + ".xls";
        this.recursosManager.generarExcel(strCabecera.toString(), lstCuerpo, nombreArchivo);
        this.recursosManager.viewArchivo(nombreArchivo);
    }

    private List obtenerCuerpoExcel(ExportarExcelVentas.SolicitudVenta exp, List<SolicitudVentaDto> lst) {
        StringBuilder strCuerpo;
        List lstFilas = new ArrayList();
        for (SolicitudVentaDto x : lst) {
            strCuerpo = new StringBuilder();
            if (exp.getId()) {
                strCuerpo.append(x.getId()).append("|");
            }
            if (exp.getEmpresa()) {
                strCuerpo.append(x.getEmpresaDto().getDescripcion()).append("|");
            }
            if (exp.getOrganizacion()) {
                strCuerpo.append(x.getOrganizacionDto().getNombre()).append("|");
            }
            if (exp.getDescripcion()) {
                strCuerpo.append(x.getDescripcion()).append("|");
            }
            if (exp.getEstado()) {
                strCuerpo.append(x.getEstadoTexto()).append("|");
            }
            if (exp.getSolicitante()) {
                strCuerpo.append(x.getSolicitanteDto().getDescripcion()).append("|");
            }
            if (exp.getUsuarioCreacion()) {
                if (x.getUsuarioCreacionDto() != null) {
                    strCuerpo.append(x.getUsuarioCreacionDto().getDescripcion()).append("|");
                } else {
                    strCuerpo.append("-").append("|");
                }
            }
            if (exp.getFechaCreacion()) {
                if (x.getFechaCreacion() != null) {
                    strCuerpo.append(x.getFechaCreacion()).append("|");
                } else {
                    strCuerpo.append("-").append("|");
                }
            }
            if (exp.getTerminalCreacion()) {
                if (x.getTerminalCreacion() != null) {
                    strCuerpo.append(x.getTerminalCreacion()).append("|");
                } else {
                    strCuerpo.append("-").append("|");
                }
            }
            if (exp.getFechaAnulacion()) {
                if (x.getFechaAnulacion() != null) {
                    strCuerpo.append(x.getFechaAnulacion()).append("|");
                } else {
                    strCuerpo.append("-").append("|");
                }
            }
            if (exp.getUsuarioAnulacion()) {
                if (x.getUsuarioAnulacionDto() != null) {
                    strCuerpo.append(x.getUsuarioAnulacionDto().getDescripcion()).append("|");
                } else {
                    strCuerpo.append("-").append("|");
                }
            }
            if (exp.getFechaConfirmacion()) {
                if (x.getFechaConfirmacion() != null) {
                    strCuerpo.append(x.getFechaConfirmacion()).append("|");
                } else {
                    strCuerpo.append("-").append("|");
                }
            }
            if (exp.getUsuarioConfirmacion()) {
                if (x.getUsuarioConfirmacionDto() != null) {
                    strCuerpo.append(x.getUsuarioConfirmacionDto().getDescripcion()).append("|");
                } else {
                    strCuerpo.append("-").append("|");
                }
            }
            if (exp.getFechaRechazo()) {
                if (x.getFechaRechazo() != null) {
                    strCuerpo.append(x.getFechaRechazo()).append("|");
                } else {
                    strCuerpo.append("-").append("|");
                }
            }
            if (exp.getUsuarioRechazo()) {
                if (x.getUsuarioRechazoDto() != null) {
                    strCuerpo.append(x.getUsuarioRechazoDto()).append("|");
                } else {
                    strCuerpo.append("-").append("|");
                }
            }
            if (exp.getPedidoVenta()) {
                if (x.getPedidoVentaDto() != null) {
                    strCuerpo.append(x.getPedidoVentaDto().getId()).append("|");
                } else {
                    strCuerpo.append("-").append("|");
                }
            }
            lstFilas.add(strCuerpo.toString());
        }
        return lstFilas;
    }

    private StringBuilder obtenerCabeceraExcel(ExportarExcelVentas.SolicitudVenta exp) {
        StringBuilder strCabecera = new StringBuilder();
        if (exp.getId()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("general.label.id")).append("|");
        }
        if (exp.getEmpresa()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("solicitud.venta.empresa")).append("|");
        }
        if (exp.getOrganizacion()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("solicitud.venta.organizacion")).append("|");
        }
        if (exp.getDescripcion()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("solicitud.venta.descripcion")).append("|");
        }
        if (exp.getEstado()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("solicitud.venta.estado")).append("|");
        }
        if (exp.getSolicitante()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("solicitud.venta.solicitante")).append("|");
        }
        if (exp.getUsuarioCreacion()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("solicitud.venta.usuario.creacion")).append("|");
        }
        if (exp.getFechaCreacion()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("solicitud.venta.fecha.creacion")).append("|");
        }
        if (exp.getTerminalCreacion()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("solicitud.venta.terminal.creacion")).append("|");
        }
        if (exp.getFechaAnulacion()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("solicitud.venta.fecha.anulacion")).append("|");
        }
        if (exp.getUsuarioAnulacion()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("solicitud.venta.usuario.anulacion")).append("|");
        }
        if (exp.getFechaConfirmacion()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("solicitud.venta.fecha.confirmacion")).append("|");
        }
        if (exp.getUsuarioConfirmacion()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("solicitud.venta.usuario.confirmacion")).append("|");
        }
        if (exp.getFechaRechazo()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("solicitud.venta.fecha.rechazo")).append("|");
        }
        if (exp.getUsuarioRechazo()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("solicitud.venta.usuario.rechazo")).append("|");
        }
        if (exp.getPedidoVenta()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("solicitud.venta.pedido.venta")).append("|");
        }
        return strCabecera;
    }

    public ExportarExcelVentas.SolicitudVenta onChangeChekExcel(Boolean flag) {
        return new ExportarExcelVentas.SolicitudVenta(flag);
    }

    public void nuevoMuchos(List<SolicitudVentaDto> lista) throws DAOException {
        springHibernateDao.guardarColeccion(lista);
    }

    public void eliminarMuchos(List<SolicitudVentaDto> lista) throws DAOException {
        springHibernateDao.borrarColeccion(lista);
    }

    public static Logger getLogger() {
        return logger;
    }

    public static void setLogger(Logger logger) {
        SolicitudVentaManager.logger = logger;
    }

    public Long getIdEntidad() {
        return idEntidad;
    }

    public void setIdEntidad(Long idEntidad) {
        this.idEntidad = idEntidad;
    }

    public DAOGenerico<SolicitudVentaDto> getSpringHibernateDao() {
        return springHibernateDao;
    }

    public void setSpringHibernateDao(DAOGenerico<SolicitudVentaDto> springHibernateDao) {
        this.springHibernateDao = springHibernateDao;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public String getUrl() {
        return url;
    }

    public String getUrlLista() {
        return urlLista;
    }
}
